package com.info33.platform.system.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.info33.platform.system.dto.SysDictionaryDTO;
import com.info33.platform.system.entity.SysDictionary;
import com.info33.platform.system.vo.SysDictionaryVO;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @author admin
 */
@Repository
public interface SysDictionaryDao extends BaseMapper<SysDictionary> {

    /**
     * 字典表内连接查询
     *
     * @param page 分页
     * @param dto  入参
     * @return 键搜索对应子集所有列表
     */
    IPage<SysDictionaryVO> appIndexes(@Param("page") Page<SysDictionary> page, @Param("dto") SysDictionaryDTO dto);

    /**
     * 字典表内连接查询
     *
     * @param dto 入参
     * @return 键搜索对应子集所有列表
     */
    List<SysDictionaryVO> appIndexes(@Param("dto") SysDictionaryDTO dto);

    /**
     * 单表查询
     *
     * @param page 分页
     * @param dto  入参
     * @return 键搜索对应子集分页列表
     */
    IPage<SysDictionaryVO> appPid(@Param("page") Page<SysDictionary> page, @Param("dto") SysDictionaryDTO dto);


    /**
     * 单表查询
     *
     * @param dto 入参
     * @return 键搜索对应子集分页列表
     */
    List<SysDictionaryVO> appPid(@Param("dto") SysDictionaryDTO dto);

    /**
     * 单表查询
     *
     * @param list 索引
     * @param tid  租户 id
     * @return vo
     */
    List<SysDictionaryVO> appIndexesJsonObject(@Param("list") List<String> list, @Param("tid") Long tid);

    /**
     * 单表查询
     *
     * @param page 分页
     * @param dto  入参
     * @return 回退父集
     */
    IPage<SysDictionaryVO> pcBack(@Param("page") Page<SysDictionary> page, @Param("dto") SysDictionaryDTO dto);

    /**
     * 根据 id 集合，返回集合对象
     *
     * @param ids-
     * @return -
     */
    List<SysDictionaryVO> getListByIds(@Param("ids") String ids);

    /**
     * pc - 树结构查询
     *
     * @param pid-
     * @return -
     * @deprecated 效率低，oa 使用到，暂不删除
     */
    @Deprecated
    List<SysDictionaryVO> pcTree(@Param("pid") Long pid);

    /**
     * 树型结构数据源
     *
     * @param indexes 索引
     * @param pid     父 id
     * @param tid     租户 id
     * @return vo
     */
    List<SysDictionaryVO> getTreeStructureSource(@Param("indexes") String indexes, @Param("pid") Long pid, @Param("tid") Long tid);

    /**
     * 获取同层最优选项
     *
     * @param id id
     * @return 一级参数/当前单位的属性、sysDictionaryVO/基数单位的属性
     */
    SysDictionaryVO getPeerBestById(@Param("id") Long id);

    /**
     * 同级兄弟查询
     *
     * @param dto 入参
     * @return vo
     */
    List<SysDictionaryVO> listBrotherByDto(@Param("dto") SysDictionaryDTO dto);

    /**
     * 同级兄弟查询
     *
     * @param ids ids
     * @return vo
     */
    @MapKey(value = "id")
    Map<Long, SysDictionary> listBrotherByIdsToMap(@Param("ids") Object... ids);

    /**
     * 同级兄弟查询
     *
     * @param ids ids
     * @return vo
     */
    @MapKey(value = "id")
    Map<Long, SysDictionary> listByIdsToMap(@Param("ids") Object... ids);

    /**
     * 单表查询（门户端查询，门户端无需登录无法获得tenant_id）
     *
     * @param list 索引
     * @return vo
     */
    List<SysDictionaryVO> publicGetIndexesList(@Param("list") List<String> list);

}